package com.ftx.controller.test.annotation.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;

import java.util.Arrays;

/**
 * Created by fengtingxin on 2020/4/27.
 */

// 这个注解的意思是告诉spring，这个是一个注解类
@Aspect
public class LogAspects {


    //抽取通用的切入点表达式
    //1.本类引入
    //2.其他类的引入
    @Pointcut("execution(* com.ftx.controller.test.annotation.aop.BusinessClass.*(..))")
    public void pointCut(){

    }

    @Before("pointCut()")
    public void logStart(JoinPoint joinPoint){
        Object[] args = joinPoint.getArgs(); // 获取入参
        System.out.println("业务逻辑日志开始");
        System.out.println("业务逻辑方法签名："+joinPoint.getSignature().getName());

        System.out.println("业务逻辑入参为："+ Arrays.asList(args));
    }

    @After("pointCut()")
    public void logEnd(){
        System.out.println("业务逻辑日志结束");
    }

    /**
     * joinPoint 这个参数一定要放在第一位！！！！！！！
     * @param joinPoint
     * @param result
     */
    @AfterReturning( value = "pointCut()",returning = "result")
    public void logSuccess(JoinPoint joinPoint,Object result){
        System.out.println("业务逻辑正常返回");
        System.out.println("业务逻辑返回值为：" + result);
    }

    @AfterThrowing(value = "pointCut()" ,throwing = "exception")
    public void logError(Exception exception){
        System.out.println("业务逻辑异常返回");
        System.out.println("业务逻辑异常返回信息为：" + exception);
    }
}
